/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import pe.com.cotelasa.common.dao.DaoImpl;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOVentaNotaDebito;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.VentaNotaDebito;

/**
 *
 * @author Jorge
 */
@SuppressWarnings({ "unchecked", "serial","rawtypes","deprecation"})
@Repository("daoVentaNotaDebito")
public class DAOVentaNotaDebito extends DaoImpl<VentaNotaDebito, Integer> implements IDAOVentaNotaDebito,Serializable{

    @Override
    public int obtenerIdMonedaNotaDebito(Integer idVentaNotaDebito) throws DAOException {
         try {
            Integer moneda = (Integer)sessionFactory.getCurrentSession().createSQLQuery("SELECT moneda FROM cotelasa.venta_nota_debito WHERE codnd=:id").addScalar("moneda", Hibernate.INTEGER).setParameter("id", idVentaNotaDebito).uniqueResult();
            return moneda.intValue();            
        } catch (Exception e) {
          
        }
        return 0;
    }

    @Override
    public List<VentaNotaDebito> obtenerNotaDebitoRV(String inicio, String fin, Integer idSede) throws DAOException {
         List<VentaNotaDebito> listaFacturacion = new ArrayList<VentaNotaDebito>();
        try {
            listaFacturacion = sessionFactory.getCurrentSession().createSQLQuery("SELECT * FROM cotelasa.venta_nota_debito WHERE fechand>='"+inicio+"' AND fechand<='"+fin+"' AND id_sede="+idSede+"  ORDER BY fechand ASC")
                    .addEntity(VentaNotaDebito.class)                
                    .list();
                    
        } catch (Exception e) {
            
        }
        return listaFacturacion;
    }

    @Override
    public List<VentaNotaDebito> obtenerVentaNotaDebitoBusqueda(VentaNotaDebito ventaNotaDebito, Date fechaInicio, Date fechaFinal) throws DAOException {
        List<VentaNotaDebito> lista = new ArrayList<VentaNotaDebito>();
        try {
            sessionFactory.getCurrentSession().flush();
            Criteria query = sessionFactory.getCurrentSession().createCriteria(VentaNotaDebito.class)
                    .addOrder(Order.desc("id"))
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .add(Restrictions.like("ruc", "%" + ventaNotaDebito.getRuc() + "%"))
                    .add(Restrictions.eq("sede", ventaNotaDebito.getSede()))
                    .add(Restrictions.like("numnd", "%" + ventaNotaDebito.getNumnd() + "%"));
            

            if (fechaInicio == null && fechaFinal == null) {
                lista = query.list();
            } else if (fechaInicio != null && fechaFinal != null) {
                lista = query.add(Restrictions.ge("fecha", fechaInicio)).add(Restrictions.le("fecha", fechaFinal)).list();
            } else if (fechaInicio == null) {
                lista = query.add(Restrictions.le("fecha", fechaFinal)).list();
            } else if (fechaFinal == null) {
                lista = query.add(Restrictions.ge("fecha", fechaInicio)).list();
            }

        } catch (Exception e) {
            throw new DAOException(e.getMessage(), e);
        }
        return lista;
    }
    
    @Override
    public void eliminarDetalleND(Integer idVentaNotaDebito) throws DAOException {
        try {
            sessionFactory.getCurrentSession().createSQLQuery("DELETE FROM cotelasa.venta_detalle_nota_debito WHERE codnd=:id").setParameter("id", idVentaNotaDebito).executeUpdate();
        } catch (Exception e) {
        }
    }
    
}
